package com.monas.client.export;

import java.io.IOException;
import java.io.OutputStream;
import java.util.LinkedList;

import com.monas.client.util.Column;

/**
 * Class render untuk meng-ekspor dari dataset ke file.
 * 
 * @author 'EkoWahyudi'
 * 
 */
public abstract class Renderer {

	/**
	 * Header untuk kolom.
	 */
	protected Column[] headers = null;

	/**
	 * Record-record untuk table.
	 */
	protected LinkedList<Object[]> records = null;

	/**
	 * Tuliskan isi tabel ke dalam output stream.
	 * 
	 * @throws jika
	 *             ada masalah saat nulis ke output stream
	 */
	public abstract void writeTo(OutputStream outputStream) throws IOException;

	/**
	 * Menjalankan proses render.
	 */
	public abstract void render();

	/**
	 * Tentukan header tabel untuk export ke file.
	 * 
	 * @param headers
	 *            header tabel
	 */
	public void setHeaders(Column[] headers) {
		this.headers = headers;
	}

	/**
	 * Tambah record untuk tabel.
	 * 
	 * @param record
	 *            record tabel
	 * @return indeks record yang baru
	 */
	public int addRecord(Object[] record) {
		records.add(record);
		return records.size() - 1;
	}

}
